package cool.webstudy.admin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cool.webstudy.admin.constant.enums.CompetitionStatusEnum;
import cool.webstudy.admin.model.dto.competition.*;
import cool.webstudy.admin.model.vo.competition.PaginationQueryCompetitionInfoListVO;
import cool.webstudy.admin.model.vo.competition.QueryCompetitionDetailInfoVO;
import cool.webstudy.admin.model.vo.competition.QueryCompetitionRoughInfoVO;

import java.util.List;
import java.util.Map;

/**
 * @author 莫振双
 * @date 2025/1/6 23:19
 * @description: 赛事管理接口定义类
 */
public interface CompetitionService {
    /**
     * @param dto 根据IP初始化赛事接口请求参数模型
     * @description: 根据IP地址初始化赛事
     */
    void initForIP(InitCompetitionForIPDTO dto);
    /**
     * @param dto 创建赛事请求参数模型
     * @description: 创建赛事
     */
    Boolean createCompetition(CreateCompetitionDTO dto);
    /**
     * @param dto 编辑赛事请求参数模型
     * @description: 更新赛事
     */
    Boolean updateCompetition(UpdateCompetitionDTO dto);
    /**
     * @param unCode 赛事业务主键
     * @description: 根据赛事业务主键查询赛事详细信息
     */
    QueryCompetitionDetailInfoDTO queryCompetitionDetailInfo(String unCode);
    /**
     * @param unCode 赛事业务主键
     * @param statusFlag 赛事状态
     * @description: 根据赛事业务主键更新赛事状态
     */
    Boolean updateCompetitionStatus(String unCode, CompetitionStatusEnum statusFlag);
    /**
     * @description: 查询赛事简要信息Map
     */
    Map<String, String> queryCompetitionRoughInfoMap();
    /**
     * @param dto 分页查询赛事信息列表请求参数模型
     * @description: 分页查询赛事信息列表
     */
    Page<PaginationQueryCompetitionInfoListVO> paginationQueryCompetitionInfoList(PaginationQueryCompetitionInfoListDTO dto);
    /**
     * @description: 查询赛事简要信息列表
     */
    List<QueryCompetitionRoughInfoVO> queryCompetitionRoughInfoList();
    /**
     * @param unCode 赛事业务主键
     * @description: 根据赛事业务主键查询赛事详细信息
     */
    QueryCompetitionDetailInfoVO queryCompetitionDetailInfoVO(String unCode);
    /**
     * @param unCode 赛事业务主键
     * @description: 根据赛事业务主键查询赛事名称
     */
    String queryCompetitionNameByUnCode(String unCode);
    /**
     * @param unCode 赛事业务主键
     * @description: 根据赛事业务主键更新赛事当前回合数
     */
    void updateCompetitionCurrentRoundCount(String unCode);
    /**
     * @param context 模糊搜索关键词
     * @description: 根据模糊搜索关键词查询赛事业务主键和赛事名称Map
     */
    Map<String,String> queryCompetitionUnCodeNameMapByContext(String context);
}
